/**
* @file osal_task.h
* @brief [OSAL]Operating System Abstraction Layer 
* @details 
* @author huangbin
* @version V1.0.0
* @date 2025-04-25
* @copyright All documents are copyrighted by Shenzhen Xinlongwei Technology Co., LTD.
*            They may not be used for commercial purposes without permission
*/
#ifndef __OSAL_TIMER_H__
#define __OSAL_TIMER_H__
#include "inc.h"

#ifdef __cplusplus
 extern "C" {
#endif /* __cplusplus */
////////////////////////////define//////////////////////////////////////
/**osal支持的最大定时器数量*/
#define OSAL_TIMER_MAX   6

/**osal定时器管理结构*/
typedef struct {
	uint8_t taskId; 	        /*!<任务Id*/
    uint8_t  run;		        /*!<运行标志*/
	uint32_t event;		        /*!<事件标志*/
	uint32_t timeout_value; 	/*!<超时时间*/
}OSAL_Timer;

/**osal 定时器常量*/
#define OSAL_TIMER_1MS      1		/*!<1 ms*/
#define OSAL_TIMER_10MS		10		/*!<10 ms*/
#define OSAL_TIMER_100MS	100		/*!<100 ms*/
#define OSAL_TIMER_1000MS	1000    /*!<100 ms*/

/**
* @brief 初始化osal定时器
*/ 
extern void osalTimerInit( void );

#define OSAL_TIMER_FAIL			0xFFFFFFFF
/**
* @brief 设置一个任务级的超时定时器
* @param[in] task_id 任务id
* @param[in] event_id 事件id(超时时间到后会将此事件id放入任务事件表)
* @param[in] timeout_value 超时时间(单位ms，最小10ms)
* @return uint32_t 任务id，失败的话返回OSAL_TIMER_FAIL
*/ 
extern uint32_t osalStartTimer( uint32_t task_id, uint32_t event_id,uint32_t timeout_value);

/**
* @brief 停止任务级的超时定时器
* @param[in] task_id 任务id
* @param[in] event_id 事件id
* @return uint32_t 任务id，失败的话返回OSAL_TIMER_FAIL
*/
extern uint32_t osalStopTimer( uint32_t task_id, uint32_t event_id);

/**
* @brief osal的定时器中断回调函数
* @param[in] msTick 消逝的ms数
*/
extern void osalTimerIsr( uint32_t msTick );
/////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif


